public class ArithmeticOperatorTest1 {// Arithmetic算术，Operator运算符，操作符

    public static void main(String[] args) {
        System.out.println('a' + 'b');//求和 97+98=195
        System.out.println('a' + "b");//拼接 ab
        System.out.println(1 + 2);//求和
        System.out.println("1" + 2);//拼接 "12"，在控制台打印只能看12

        System.out.println("================");
        System.out.println(5 / 2);//2
        //System.out.println(5 / 0);//发生java.lang.ArithmeticException算术异常
        System.out.println(5.0 / 0);//Infinity 无穷
        System.out.println(5 / 3);

        System.out.println("================");
        System.out.println(7 / 2);//求商  3
        System.out.println(7 % 2);//求余数 1
        //数学  7 ÷ 2 = 3...1

        System.out.println(7 % -2);//求余数 1
        //数学 7 ÷ -2 = -3 ...1
        //被除数 = 除数 * 商 + 余数
        System.out.println(-7 % 2);//求余数 -1
        //数学 -7 ÷ 2 = -3 ...-1
        System.out.println(-7 % -2);//求余数 -1
        //数学 -7 ÷ -2 = 3 ...-1
        //结论：余数的正负号与被除数一样

        System.out.println(7.0 % 0);//NaN
       // System.out.println(7 % 0);//java.lang.ArithmeticException

        System.out.println("=================");
        //System.out.println(5++);//错误，5不是变量
        int a = 1;
        System.out.println("a = " + a);//a=1
        a++;
        System.out.println("a = " + a);//a=2
        ++a;
        System.out.println("a = " + a);//a=3

        System.out.println("=================");
        int i = 1;
        System.out.println(i++);//1
        //先取i的值1，放一边，然后i自增1，i变为2，再用取出来的值输出
        System.out.println(i);
        System.out.println("====================");
        int j = 1;
        System.out.println(++j);
        //先对j自增1，然后取j的值2，输出的是2
        System.out.println(j);//2

        System.out.println("======================");
        int k = 1;
        int m = k++;//因为先取k的值1，放一边，然后k自增2，用之前取出来的1赋值给m
        System.out.println("k = " + k);//k=2
        System.out.println("m = " + m);//m=1
        System.out.println("====================");
        int n = 1;
        int p = ++n;//先对n自增1，n=2，取2赋值给p
        System.out.println("n = " + n);//n=2
        System.out.println("p = " + p);//p=2

        System.out.println("====================");
        int q = 1;
        q = q++;//先取q的值1，放一边，q自增为2，然后用之前取出来的1赋值给q
        System.out.println("q = " + q);//q=1
        q = ++q;//先对q自增1，q=2,取2的值赋值给q
        System.out.println("q = " + q);//q=2

        System.out.println("======================");
        int x = 1;
        int y = 2;
        int z = x++ + ++x * y--;
        // (1)处理x++     先取x的值1放一边，然后x自增1,x=2
        //    因为+的优先级没有*高，所以先算后面的乘法
//        （2）++x       先对x自增1，x=3，取x的值3放一边
//        （3）y--        先取y的值2，放一边，然后y自减1，y=1
//        （4）算乘法  3 * 2 = 6
//        （5）算加法   1 + 6 = 7
        System.out.println("x = " + x);//x=3
        System.out.println("y = " + y);//y=1
        System.out.println("z = " + z);//z=7
    }

}
